<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException;
use Tymon\JWTAuth\Facades\JWTAuth;

class JWTAuthMiddleware
{
    public function handle(Request $request, Closure $next): Response
    {
        try {
            // 验证请求中的 token 是否有效
            $user = JWTAuth::parseToken()->authenticate();

            // 如果需要将用户信息注入请求，可添加以下代码
            if ($user) {
                $request->merge(['user' => $user]);
            }
        } catch (TokenExpiredException $e) {
            // 令牌过期
            return response()->json([
                'code' => 'A0230',
                'msg' => '访问令牌已过期，请刷新令牌',
            ], 401);
        } catch (TokenInvalidException $e) {
            // 令牌无效
            return response()->json([
                'code' => 'A0231',
                'msg' => '无效的令牌'
            ], 401);
        } catch (JWTException $e) {
            // 缺少令牌或其他错误
            return response()->json([
                'code' => 'A0231',
                'msg' => '请提供令牌'
            ], 401);
        }
        // 令牌有效，直接进入接口（不注入用户）
        return $next($request);
    }
}
